/**
 * Werwolftool-Spielleiterfunktionen
 * @author JANNiS <jannis@huffle-home.de>
 */

/**
 * Ein Spieler
 */
var Spieler = new Class({
	/**
	 * Name des Spielers
	 */
	name: null,
	/**
	 * Notizen zum Spieler
	 */
	notizen: null,
	/**
	 * Rolle des Spielers
	 * Achtung: nur mit setRolle() setzen, da Objekt!
	 */
	rolle: null,
	/**
	 * Name des Spielers, auf den gestimmt wurde
	 */
	stimme: null,
	/**
	 * Namen der Spieler, die auf diesen Spieler gestimmt haben
	 */
	stimmen: [],
	/**
	 * Stimmliste des Spielers
	 */
	schussliste: null,
	
	/**
	 * Konstruktor, weist Standard-Eigenschaften zu
	 * @argument Name des Spielers
	 */
	initialize: function(name) {
		// Name merken
		this.name = name;
		// Rolle merken
		this.setRolle("Dorfbewohner");
	},
	
	/**
	 * Setzt eine Spielereigenschaft
	 * @argument eigenschaft Name der Eigenschaft
	 * @argument wert Neuer Wert für die Eigenschaft
	 * @return this
	 */
	set: function(eigenschaft, wert) {
		// falls die Rolle geändert werden soll ...
		if(eigenschaft == "rolle") {
			// Rolle-Ändern-Methode aufrufen
			this.setRolle(wert);
		// ... sonst ...
		} else {
			// Eigenschaft ändern
			this[eigenschaft] = wert;
		}
		
		// return
		return this;
	},
	
	/**
	 * Gibt eine Spielereigenschaft zurück
	 * @argument eigenschaft Eigenschaft, die zurückgegeben werden soll
	 * @return Wert der Eigenschaft
	 */
	get: function(eigenschaft) {
		// Eigenschaftswert merken
		var wert = this[eigenschaft];
		
		// falls Eigenschaft ein Array ist ...
		if($type(wert) == "array") {
			// ... Kopie anlegen
			wert = $A(wert);
		}
		
		// Wert zurückgeben
		return wert;
	},
	
	/**
	 * Setzt die Rolle eines Spielers
	 * @argument rolle Neue Rolle(/name)
	 * @return this
	 */
	setRolle: function(rolle) {
		// falls Rolle ein Objekt ist ...
		if($type(rolle) == "object") {
			// Nur Namen merken
			rolle = rolle.get("name");
		}
		
		// falls der Spieler bereits eine Rolle hat ...
		if(this.get("rolle") != null) {
			// Spieler aus der Spielerliste der alten Rolle löschen
			this.rolle.removeSpieler(this);
		}
		
		// falls die neue Rolle bereits bekannt ist ...
		if(spiel.kenntRolle(rolle)) {
			// ... weise die Rolle zu
			this.rolle = spiel.getRolle(rolle);
		}
		// ... sonst ...
		else {
			// ... erstelle die Rolle neu und weise sie zu
			this.rolle = spiel.neueRolle(rolle);
		}
		
		// In die Spielerliste der neuen Rolle eintragen
		this.rolle.addSpieler(this);
		
		// return
		return this;
	}
});